using Order.Api.Read.Dto.Order;

namespace Order.Api.Read.Service.MedicalAIService
{
   /// <summary>
   /// 模拟AI服务实现类
   /// 用于开发和测试阶段，提供模拟的AI响应
   /// 不依赖真实的Ollama服务，可以快速验证业务逻辑
   /// </summary>
   public class MockAIService : IMedicalAIService
   {
      /// <summary>
      /// 日志记录器，用于记录模拟服务的运行状态
      /// </summary>
      private readonly ILogger<MockAIService> _logger;

      /// <summary>
      /// 构造函数
      /// </summary>
      /// <param name="logger">日志记录器实例</param>
      public MockAIService(ILogger<MockAIService> logger)
      {
         _logger = logger;
      }

      /// <summary>
      /// 测试AI服务连接状态
      /// 模拟服务始终返回true，表示连接正常
      /// </summary>
      /// <returns>始终返回true，表示连接正常</returns>
      public async Task<bool> TestConnectionAsync()
      {
         await Task.Delay(100); // 模拟网络延迟
         return true; // 模拟服务始终可用
      }

      /// <summary>
      /// 分析处方内容
      /// 提供模拟的处方分析结果，包含专业的医疗建议格式
      /// </summary>
      /// <param name="prescriptionText">处方文本内容</param>
      /// <returns>模拟的处方分析报告</returns>
      public async Task<string> AnalyzePrescriptionAsync(string prescriptionText)
      {
         await Task.Delay(1000); // 模拟处理时间

         return $@"📋 处方分析报告

【处方内容】
{prescriptionText}

【分析结果】

1. 药品配伍分析：
   ✅ 药品配伍基本合理
   ⚠️ 建议注意用药间隔

2. 用药剂量评估：
   ✅ 剂量在安全范围内
   📝 建议按医嘱服用

3. 药物相互作用：
   ⚠️ 需要注意与其他药物的相互作用
   💡 建议咨询药师

4. 患者用药建议：
   📅 按时服药
   🍽️ 饭后服用
   💧 多饮水

5. 注意事项：
   ⚠️ 如有不适立即停药
   📞 及时联系医生
   📋 定期复查

【AI 建议】
此处方整体合理，但建议在专业医生指导下使用。如有疑问，请咨询药师或医生。";
      }

      /// <summary>
      /// 生成医疗报告
      /// 根据患者信息和订单数据生成模拟的医疗报告
      /// </summary>
      /// <param name="patient">患者信息</param>
      /// <param name="orderData">订单数据</param>
      /// <returns>模拟的医疗报告</returns>
      public async Task<string> GenerateMedicalReportAsync(PatientDto patient, object orderData)
      {
         await Task.Delay(1000);

         return $@"🏥 医疗报告

【患者信息】
姓名：{patient.Name}
年龄：{patient.Age}
性别：{patient.Gender}
联系电话：{patient.Phone}

【订单分析】
订单类型：医疗咨询
状态：已完成
处理时间：{DateTime.Now:yyyy-MM-dd HH:mm:ss}

【医疗建议】
1. 定期体检
2. 保持健康生活方式
3. 遵医嘱用药
4. 定期复查

【后续随访】
建议3个月后复查，如有异常及时就医。";
      }

      /// <summary>
      /// 获取诊断建议
      /// 根据症状描述和病史提供模拟的诊断建议
      /// </summary>
      /// <param name="symptoms">症状描述</param>
      /// <param name="patientHistory">患者病史</param>
      /// <returns>模拟的诊断建议</returns>
      public async Task<string> GetDiagnosticSuggestionAsync(string symptoms, string patientHistory)
      {
         await Task.Delay(1000);

         return $@"🔍 诊断建议

【症状描述】
{symptoms}

【病史信息】
{patientHistory}

【初步诊断】
基于症状分析，可能的诊断方向：
1. 常见疾病A
2. 常见疾病B
3. 需要进一步检查

【建议检查】
1. 血常规
2. 影像学检查
3. 专科会诊

【注意事项】
⚠️ 这只是初步建议，最终诊断需要专业医生确认
📞 如有紧急情况请立即就医
📋 建议及时到医院进行详细检查";
      }

      /// <summary>
      /// 检查药品相互作用
      /// 分析多个药品之间是否存在相互作用的模拟结果
      /// </summary>
      /// <param name="drugList">药品列表</param>
      /// <returns>模拟的药品相互作用分析</returns>
      public async Task<string> CheckDrugInteractionsAsync(List<string> drugList)
      {
         await Task.Delay(1000);

         var drugs = string.Join("、", drugList);

         return $@"💊 药品相互作用分析

【药品列表】
{drugs}

【相互作用分析】
1. 相互作用评估：
   ✅ 大部分药品配伍合理
   ⚠️ 需要注意某些组合

2. 严重程度：
   🔴 高风险：无
   🟡 中风险：1个组合
   🟢 低风险：其他组合

3. 用药建议：
   📅 建议间隔2小时服用
   💊 避免同时服用
   📋 定期监测

4. 替代方案：
   💡 可考虑替代药品
   📞 咨询药师获取建议

【注意事项】
⚠️ 严格按照医嘱用药
📞 如有不适立即停药并咨询医生";
      }

      /// <summary>
      /// 生成健康建议
      /// 根据患者信息和订单历史生成个性化的健康建议
      /// </summary>
      /// <param name="patient">患者信息</param>
      /// <param name="orderHistory">订单历史</param>
      /// <returns>模拟的个性化健康建议</returns>
      public async Task<string> GenerateHealthAdviceAsync(PatientDto patient, List<object> orderHistory)
      {
         await Task.Delay(1000);

         return $@"🏥 个性化健康建议

【患者信息】
姓名：{patient.Name}
年龄：{patient.Age}
性别：{patient.Gender}

【健康风险评估】
基于患者信息和订单历史：
1. 慢性疾病风险：中等
2. 生活方式风险：低
3. 遗传风险：需要进一步评估

【个性化建议】
1. 生活方式改善：
   🏃‍♂️ 每周运动3-4次
   🥗 均衡饮食
   😴 保证充足睡眠

2. 预防保健：
   💉 定期体检
   🩺 专科检查
   📋 健康档案管理

3. 紧急处理：
   🚨 紧急联系人设置
   📞 急救电话准备
   🏥 就近医院了解

【随访计划】
建议每6个月进行一次全面体检，如有异常及时就医。";
      }
   }
}